package com.iamteer.b_ognl;

import org.junit.Test;

import ognl.Ognl;
import ognl.OgnlContext;

public class OgnlDemo1 {
	/**
	 * 1. Ognl 表达式语言取值，取非根元素的值，需要用#号
	 * @throws Exception
	 */
	@Test
	public void testOgnl() throws Exception{
		OgnlContext context = new OgnlContext();
		
		User user = new User();
		user.setId(100);
		user.setName("Jack");
		// 往非根元素放入数据，取值的时候需要用“#”号
		context.put("user", user);
		
		// 获取数据 Map
		// 先构建一个 Ognl 表达式，再解析表达式
		Object ognl = Ognl.parseExpression("#user.name");
		Object value = Ognl.getValue(ognl, context, context.getRoot());
		System.out.println(value);
	}
	
	/**
	 * 2. Ognl 表达式语言取值，非根元素的值，不需要用#号
	 * @throws Exception
	 */
	@Test
	public void testOgnl2() throws Exception{
		OgnlContext context = new OgnlContext();
		
		User user = new User();
		user.setId(100);
		user.setName("Jack");
		// 往根元素放入数据，取值的时候不需要“#”号
		context.setRoot(user);
		
		// 获取数据 Map
		// 先构建一个 Ognl 表达式，再解析表达式
		Object ognl = Ognl.parseExpression("address.province");
		Object value = Ognl.getValue(ognl, context, context.getRoot());
		System.out.println(value);
	}
	
	/**
	 * 3. Ognl 表达式对静态表达式的支持
	 * @throws Exception
	 */
	@Test
	public void testOgnl3() throws Exception{
		OgnlContext context = new OgnlContext();
		
		Object ognl = Ognl.parseExpression("@Math@floor(10.9)");
		
		Object value = Ognl.getValue(ognl, context, context.getRoot());
		System.out.println(value);
	}
}
